//
// Created by sjjmw on 3/24/2022.
//

//应该使用dfs

#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
#include "cmath"
#include<iomanip>
#include "string"
#include "map"
#include "list"
#include "queue"
//数组A中共有n个元素，初始全为0。
// 你可以对数组进行两种操作：1、将数组中的一个元素加1；
// 2、将数组中所有元素乘2。求将数组A从初始状态变为目标状态B所需要的最少操作数。

//这个题不要在被骗了。就是反过来想，不是宽搜
struct Sol{

//    std::queue<State> queue;
    int n;
    std::vector<std::vector<int>> mat;
    int max=0;
    int maxcnt=0;
    void dfs(int x,int y,int sum){
        if(y<0||x>=n){
            return;
        }
        sum+=mat[y][x];
        if(x==n-1&&y==0){
            if(sum>max){
                max=sum;
                maxcnt=1;
            }else if(sum==max){
                maxcnt++;
            }
            return;
        }
        dfs(x+1,y,sum);
        dfs(x,y-1,sum);
    }
    void handle(
            int n1
            ){
        n=n1;
        std::vector<int> line(n);
        for (int j = 0; j < n; ++j) {
            for (int i = 0; i < n; ++i) {
                std::cin>>line[i];
            }
            mat.push_back(line);
        }
        dfs(0,n-1,0);
        printf("%d %d\n",maxcnt,max);
    }
};
int main(){
    int a,b,c;
//    float a,b,c,d;
    int e;

    while(std::cin>>a){
        Sol().handle(a);

//        Sol().handle(a,b);
    }

    return 0;
}